var express = require('express');
var mongoose = require('mongoose');
var router = express.Router();

var jwt = require('jwt-simple');
var secret = 'ACE_BLOG';

require('../public/javascripts/DateFormat');

var userModel = require('../model/usersModel');
mongoose.connection.openUri('mongodb://localhost/myBlog');


router.get('/login', function (req, res, next) {
    // var md5 = require("blueimp-md5");
    // var hash = md5("value");
    // console.log(hash);

    res.render('login');
});


//logout
router.get('/logout', function (req, res, next) {
    res.clearCookie('token');
    res.render('login');
});


router.post('/login', function (req, res, next) {

    var parms = req.body;
    parms.time = new Date().Format("yyyy-MM-dd hh:mm:ss");


    console.log('parms: '+JSON.stringify(parms));

// HS256 secrets are typically 128-bit random strings, for example hex-encoded:
// var secret = Buffer.from('fe1a1915a379f3be5394b64d14794932', 'hex)

// encode
    var token = jwt.encode(parms, secret);
    console.log('token: '+token);

// decode
    var decoded = jwt.decode(token, secret);
    console.log('decoded: '+JSON.stringify(decoded));
    //=> {"username":"admin","md5":"d41d8cd98f00b204e9800998ecf8427e","time":"2017-07-18 16:47:35"}

    parms.token = token;


    // res.cookie({'token': token, httpOnly: true });
    // res.cookie('token', token, {httpOnly: true });


    // console.log(req.cookies);


    // var findParms = {'token': token};
    //
    // console.log(findParms);

    userModel.findOne({md5: parms.md5}, function (error, user){
        console.log('-------- user --------');
        console.log(user);

        if (user) {
            res.clearCookie('token');
            res.cookie('token', token, {httpOnly: true});
            res.redirect('/');
        } else {
            res.redirect('login');
        }
    });

    // userModel.findOne({username: parms.username}, function (error, user) {
    //     if (!user) {
    //         userModel.create(parms, function (error) {
    //             if (!error) {
    //                 res.json(error);
    //             } else {
    //                 res.find(function (err, user) {
    //                     if (!err) {
    //                         res.json(user);
    //                     } else {
    //                         res.json(err);
    //                     }
    //
    //                 });
    //             }
    //         });
    //     } else {
    //         userModel.update(parms, function (error) {
    //             if (!error) {
    //                 res.json(error);
    //             } else {
    //                 userModel.save();
    //
    //                 res.find(function (err, user) {
    //                     if (!err) {
    //                         res.json(user);
    //                     } else {
    //                         res.json(err);
    //                     }
    //
    //                 });
    //             }
    //         });
    //     }
    // });

    // res.json(JSON.stringify(req.cookies));
});


router.post('/addUser', function (req, res, next) {

    var parms = req.body;
    parms.time = new Date().Format("yyyy-MM-dd hh:mm:ss");


// encode
    var token = jwt.encode(parms, secret);
    console.log('token: '+token);

// decode
    var decoded = jwt.decode(token, secret);
    console.log('decoded: '+JSON.stringify(decoded)); //=> { foo: 'bar' }

    parms.token = token;


    // res.cookie({'token': token, httpOnly: true });
    // res.cookie('token', token, {httpOnly: true });


    // console.log(req.cookies);


    userModel.findOne({username: parms.username}, function (error, user) {
        if (!user) {
            userModel.create(parms, function (error) {
                if (!error) {
                    res.json(error);
                } else {
                    res.find(function (err, user) {
                        if (!err) {
                            res.json(user);
                        } else {
                            res.json(err);
                        }

                    });
                }
            });
        } else {
            userModel.update(parms, function (error) {
                if (!error) {
                    res.json(error);
                } else {
                    userModel.save();

                    res.find(function (err, user) {
                        if (!err) {
                            res.json(user);
                        } else {
                            res.json(err);
                        }

                    });
                }
            });
        }
    });

    res.json(JSON.stringify(req.cookies));
});


module.exports = router;
